﻿using Kanban.Entity;
using Kanban.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Kanban.Business
{
    public class QuadroBusiness
    {
        private QuadroRepository RepositoryQuadro { get; set; }
        private QuadroColunaRepository RepositoryQuadroColuna { get; set; }

        public QuadroBusiness()
        {
            this.RepositoryQuadro = new QuadroRepository();
            this.RepositoryQuadroColuna = new QuadroColunaRepository();
        }

        public List<BurndownItem> GerarGraficoBurndown(int id)
        {
            return this.RepositoryQuadro.GerarGraficoBurndown(id);
        }

        public void Adicionar(Quadro quadro)
        {
            this.RepositoryQuadro.Adicionar(quadro);

            if (quadro.Colunas != null)
            {
                foreach (QuadroColuna status in quadro.Colunas)
                {
                    this.RepositoryQuadroColuna.Adicionar(status, quadro.Id);
                }

                /*quadro.ListaStatus = new List<QuadroStatus>();
                quadro.ListaStatus.Add(new QuadroStatus() { Nome = "Todo", Ordem = 1 });
                quadro.ListaStatus.Add(new QuadroStatus() { Nome = "Doing", Ordem = 2 });
                quadro.ListaStatus.Add(new QuadroStatus() { Nome = "Done", Ordem = 3 });*/
            }



        }

        public void Atualizar(Quadro quadro)
        {
            this.RepositoryQuadro.Atualizar(quadro);
        }

        public bool ConsultarPermissaoUsuario(int idQuadro, string nomeUsuario)
        {
            throw new NotImplementedException();
        }

        public List<Quadro> Listar()
        {
            return this.RepositoryQuadro.Listar();
        }

        public Quadro ObterPorId(int id)
        {
            Quadro quadro = this.RepositoryQuadro.ObterPorId(id);

            ObterColunas(quadro);
            
            return quadro;
        }

        private void ObterColunas(Quadro quadro)
        {
            quadro.Colunas = this.RepositoryQuadroColuna.ListarPorQuadro(quadro.Id);

            if (quadro.Colunas == null)
            {
                quadro.Colunas = new List<QuadroColuna>();
                quadro.Colunas.Add(new QuadroColuna() { Nome = "Todo", Ordem = 1 });
                quadro.Colunas.Add(new QuadroColuna() { Nome = "Doing", Ordem = 2 });
                quadro.Colunas.Add(new QuadroColuna() { Nome = "Done", Ordem = 3 });
            }
        }

        public void Remover(int id)
        {
            this.RepositoryQuadro.Remover(id);
        }

        public List<Quadro> ListarPorUsuario(string nomeUsuario, bool? arquivado)
        {
            return this.RepositoryQuadro.ListarPorUsuario(nomeUsuario, arquivado);
        }

        public Quadro ObterPorChave(string chave)
        {
            Quadro quadro = this.RepositoryQuadro.ObterPorChave(chave);
            ObterColunas(quadro);
            return quadro;
        }
    }
}
